package com.software.levelupserver.controller;

import com.software.levelupserver.entity.Badge;
import com.software.levelupserver.entity.SystemTask;
import com.software.levelupserver.service.SystemTaskService;
import com.software.levelupserver.utils.ResultVOUtil;
import com.software.levelupserver.vo.Result;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@CrossOrigin
@RequestMapping("/systemTask")
public class SystemTaskController {
    @Resource
    private SystemTaskService systemTaskService;



    /**
     * 用户领取系统任务
     * @param systemTaskId
     * @param time
     * @param startDate
     * @param endDate
     * @return
     */
    @PostMapping("/addUserSystemTask")
    public Result addUserSystemTask(@RequestParam int systemTaskId,
                                    @RequestParam String time, @RequestParam String startDate, @RequestParam String endDate){

        int result = systemTaskService.addUserSystemTask(systemTaskId, time, startDate, endDate);
        if (result > 0){
            return ResultVOUtil.success("新增成功");
        }else {
            return ResultVOUtil.error("新增任务失败");
        }
    }

    /**
     * 用户更新系统任务状态
     * <hr/>
     * <b>同时判断完成系统任务的数量是否达到获取徽章的条件，满足条件则添加徽章</b>
     * @param systemTask
     * @return 返回值是一个Badge实例（如果返回的徽章实例的id为0，则说明没有到达获取徽章的条件）
     */
    @PostMapping("/updateUserSystemTask")
    public Result updateUserSystemTask(@RequestBody SystemTask systemTask){

        Badge badge = systemTaskService.updateUserSystemTask(systemTask);

        if (badge != null){
            return ResultVOUtil.success(badge);
        }else {
            return ResultVOUtil.error("更新状态失败");
        }

    }

    /**
     * 删除（取消）领取的任务
     * @param systemTask
     * @return
     */
    @PostMapping("/deleteUserSystemTask")
    public Result deleteUserSystemTask(@RequestBody SystemTask systemTask){
        int affectNum = systemTaskService.deleteUserSystemTask(systemTask);

        if (affectNum >= 0){
            return ResultVOUtil.success("删除成功，删除数据条数：" + affectNum);
        }else{
            return ResultVOUtil.error("删除失败");
        }
    }

    /**
     * 获取所有系统任务
     * @return
     */
    @GetMapping("/getAllSystemTasks")
    public Result getAllSystemTasks(){
        List<SystemTask> systemTasks = systemTaskService.getAllSystemTasks();
        if (systemTasks != null){
            return ResultVOUtil.success(systemTasks);
        }else {
            return ResultVOUtil.error("获取系统任务失败");
        }
    }

    /**
     * 根据类型获取系统任务
     * @param type
     * @return
     */
    @GetMapping("/getSystemTasksByType")
    public Result getSystemTasksByType(@RequestParam int type){
        List<SystemTask> systemTasks = systemTaskService.getSystemTasksByType(type);
        if (systemTasks != null){
            return ResultVOUtil.success(systemTasks);
        }else {
            return ResultVOUtil.error("获取系统任务失败");
        }
    }

    /**
     * 获取用户领取的系统任务
     * @return
     */
    @GetMapping("/getSystemTasksByUserId")
    public Result getSystemTasksByUserId() {

        List<SystemTask> systemTaskList = systemTaskService.getSystemTasksByUserId();
        if (systemTaskList != null){
            return ResultVOUtil.success(systemTaskList);
        }else {
            return ResultVOUtil.error("获取系统任务失败");
        }

    }

    /*后台管理系统的SQL操作*/
    /**
     * 发布新的系统任务
     * @param systemTask
     * @return
     */
    @PostMapping("/addSystemTask")
    public Result addSystemTask(@RequestBody SystemTask systemTask){
        int resultNum = systemTaskService.addSystemTask(systemTask);

        if (resultNum > 0){
            return ResultVOUtil.success("新增系统任务成功");
        }else {
            return ResultVOUtil.error("新增系统任务失败");
        }
    }
}
